package com.example.demo.TextTest;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.example.demo.TextTest.entity.SimulaEntity;
import com.sun.istack.internal.NotNull;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author FF998
 */
@Component
public class TextOne {
    public static <map> void main(String[] args) throws IOException, NoSuchAlgorithmException {

//        InputStream typeList = new ClassPathResource("static/CategoryList.txt").getInputStream();
//        if (getEcMarketRegionalSettingsResult(typeList, "黑豆")){
//
//        }

//        double a = 5;
//        int b = 10;
//        double print = ((a-b)/b) * 100;
//
//        System.out.println(a);
//        System.out.println(print);

//        String encodedString = "OC8xOA=="; // 编码后的字符串
//        byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
//        String decodedString = new String(decodedBytes);
//
//        System.out.println(decodedString); // 输出解码后的字符串


//        double number = 1.0E7;
//        int convertedNumber = (int) number;
//        System.out.println(convertedNumber);

        /** ------------------------------ */

//        List<String> stringA = Arrays.asList("A","B","C","D");
//        List<String> stringB = Arrays.asList("A","B");
//        List<String> collectA = stringA.stream().filter(x -> stringB.stream().noneMatch(y -> y.equals(x))).collect(Collectors.toList());
//        System.out.println("stringA不匹配stringB的字符:"+collectA);
//
//        List<String> collectB = stringB.stream().filter(x -> stringA.stream().noneMatch(y -> y.equals(x))).collect(Collectors.toList());
//        System.out.println("stringB不匹配stringA的字符:"+collectB);

        /** ------------------------------ */

////        String jsonData = "[{\"name\":\"恶苗病\",\"num\":22,\"xh\":1},{\"name\":\"纹枯病\",\"num\":\"\",\"xh\":2},{\"name\":\"蚜虫\",\"num\":11,\"xh\":1}]";
////        String jsonData = "[{\"name\":\"测试\",\"num\":1,\"label\":\"轻度\"},{\"name\":\"测试\",\"num\":2,\"label\":\"轻度\"}]";
////        String jsonData = "{\"name\":\"轻度\"}";
////        String jsonData = "{\"leaf\":11,\"cm\":22,\"group\":33,\"papaer\":44}";
//        try {
//            JSONArray jsonArray = jsonData.startsWith("[") && jsonData.endsWith("]") ?
//                    JSONArray.parseArray(jsonData) : new JSONArray(Collections.singletonList(JSONObject.parseObject(jsonData)));
//            for (int i = 0; i < jsonArray.size(); i++) {
//                JSONObject jsonObject = jsonArray.getJSONObject(i);
//                // 检查每个 key 对应的 value 是否为空
//                for (String key : jsonObject.keySet()) {
//                    String value = jsonObject.getString(key);
//                    if (value.isEmpty()) {
//                        System.out.println(key + "不能为空");
//                    }else {
//                        System.out.println(key + ":" + value);
//                    }
//                }
//            }
//        } catch (JSONException e) {
//            e.printStackTrace();
//        }

        /** ------------------------------ */

//        int a = 0;
//        System.out.println("改变前:" + a);
//        System.out.println(System.identityHashCode("改变前地址:" + a));
//        add(a);
//        System.out.println("改变后:" + a);
//        System.out.println(System.identityHashCode("改变后地址:" + a));

//        boolean status = false;
//        System.out.println(status);
//        status = updateStatus(status);
//        System.out.println(status);

//        List<Integer> integers = Arrays.asList(0);
//        System.out.println(integers);
//        addList(integers);
//        System.out.println(integers);

        // 指定数值随机上调5%至8%
//        List<Double> asList = Arrays.asList(
//                13299.6,
//                769.24
//        );
//        for (Double originalValue : asList) {
//            Random random = new Random();
//            // 生成一个在5%到8%之间的随机增长百分比
//            double increasedValue = originalValue * (1 + (0.05 + random.nextDouble() * 0.03));
//
//            System.out.println("原始数值: " + originalValue);
//            System.out.println("随机上调后的数值: " + increasedValue);
//        }

        // 返回减少指定数量后的数组集合
//        List<SimulaEntity> receiveList = Arrays.asList(
//                new SimulaEntity(1L, 20L, 20L),
//                new SimulaEntity(2L, 80L, 80L),
//                new SimulaEntity(3L, 50L, 50L),
//                new SimulaEntity(4L, 80L, 80L),
//                new SimulaEntity(5L, 50L, 50L),
//                new SimulaEntity(6L, 76L, 76L),
//                new SimulaEntity(7L, 20L, 20L)
//        );
//        List<SimulaEntity> a = afterReduction(receiveList, 400.0);
//        for (SimulaEntity simulaEntity : a) {
//            System.out.println(simulaEntity);
//        }


//        // 创建 SecureRandom 对象，并设置加密算法
//        int num = (int) (Math.random() * 100) + 1;
//        System.out.println(num);

        /** ------------------------------ */

//        String rawParameter1 = "{ag_prod_manage_farm_operation._plantation_product} IN '6308eb23b0bf4b268f01c2c6c06f7053' ";
//        String rawParameter2 = "'6308eb23b0bf4b268f01c2c6c06f7053' == {ag_prod_manage_farm_operation._plantation_product} ";
//        String newParameter = "JSON_CONTAINS({ag_prod_manage_farm_operation._plantation_product},'\"6308eb23b0bf4b268f01c2c6c06f7053\"','$.dataId')";
//
//        // 提取值并构造新参数
////        String value = rawParameter.split("==")[1].trim().replace("'", "\"");
////        String parameter = String.format("JSON_CONTAINS(%s,%s,'$.dataId')",rawParameter.split("==")[0].trim(), value);
//
//        // 使用正则表达式处理可能的等号
////        String[] parts = rawParameter1.split("[=]{1,2}");
////        String value = parts[1].trim().replace("'", "\"");
////        String parameter = String.format("JSON_CONTAINS(%s,'%s','$.dataId')",parts[0].trim(), value);
////        System.out.println(parameter);
//        System.out.println(convertToJsonContains(rawParameter1));
//        System.out.println(convertToJsonContains(rawParameter2));

        /** ------------------------------ */

//        List<String> strings = Arrays.asList("A", "11", "QWE", "B");
//        LinkedList<Object> objects = new LinkedList<>(strings);
//        System.out.println(objects);
//        objects.remove("B");
//        objects.addFirst("B");
//        System.out.println(objects);

//        System.out.println(strings);
//        strings.remove("B");
//        System.out.println(strings);
//        strings.add(1,"B");
//        System.out.println(strings);

        /** ------------------------------ */

//        String message = "数据错误：部分地块已存在进行中档案!";
//
//        System.out.println(message.substring(message.indexOf("：") + 1));

//        int a = -80;
//        int b = -20;
//        System.out.println("a+b=" + (a + b));

        String plone = "15532367359";
        System.out.println(plone.substring(plone.length() - 4));
    }


    private static String convertToJsonContains(String rawParameter) {
        // 使用正则表达式处理可能的等号
        String[] parts = rawParameter.split("[IN]{1,2}");
        String leftPart = parts[0].trim();
        String rightPart = parts[1].trim();


        // 确保参数顺序正确
        String parameter = leftPart.contains("{") ? leftPart : rightPart;
        String value = leftPart.contains("{") ? rightPart : leftPart;
        value = value.replace("'", "\"");
        return String.format("JSON_UNQUOTE(JSON_EXTRACT(%s, '$.dataId')) IN %s", parameter, value);
        // 构造 JSON_CONTAINS 语句
//        return String.format("JSON_CONTAINS(%s,'%s','$.dataId')", parameter, value);
    }

    /**
     * 返回减少指定数量后的数组集合
     *
     * @param useQuantity 减少用量
     * @return List<SimulaEntity>
     */
//    static List<SimulaEntity> afterReduction(List<SimulaEntity> receiveList, double useQuantity) {
//        List<SimulaEntity> list = new ArrayList<>();
//        for (SimulaEntity simulaEntity : receiveList) {
//            if (useQuantity <= 0) {
//                break;
//            }
//            if (useQuantity >= simulaEntity.getQuantitySurplus()) {
//                useQuantity -= simulaEntity.getQuantitySurplus();
//                simulaEntity.setQuantitySingleDose(simulaEntity.getQuantitySurplus());
//                simulaEntity.setQuantitySurplus(0L);
//            } else {
//                simulaEntity.setQuantitySurplus((long) (simulaEntity.getQuantitySurplus() - useQuantity));
//                simulaEntity.setQuantitySingleDose((long) useQuantity);
//                useQuantity = 0;
//            }
//            list.add(simulaEntity);
//        }
//        if (useQuantity > 0) {
//            System.out.println("库存不足!缺少库存:" + useQuantity);
//        }
//        return list;
//    }

    /**
     * 方法内对a进行新增,a为复制后数据,不会修改方法外a的原数据对象
     */
//    private static void add(int a) {
//        a++;
//        System.out.println("改变中:" + a);
//        System.out.println(System.identityHashCode("改变中地址:" + a));
//    }
    /**
     * boolean类型同样不会修改方法外的原数据对象,需返回
     */
//    private static boolean updateStatus(boolean status) {
//        status = true;
//        return status;
//    }

    /**
     * 只有以对象形式或者数组或集合的方式传参,才会使被修改数据赋值到原数据对象
     */
//    private static void addList(List<Integer> integers) {
//        integers.set(0, 1);
//    }

    /**
     * 判断添加或者修改的种类或城市是否存在
     *
     * @param inputStream 官方种类或城市文件
     * @param areaOrType  种类或城市
     * @return Boolean
     * @throws IOException
     */
//    @NotNull
//    private static Boolean getEcMarketRegionalSettingsResult(InputStream inputStream, String areaOrType) throws IOException {
//        Set<String> set;
//        Map<String, String> strMap = null;
//
//        try (InputStreamReader read = new InputStreamReader(inputStream, "UTF-8")) {
//            set = new HashSet<>();
//            BufferedReader bufferedReader = new BufferedReader(read);
//            String txt;
//            while ((txt = bufferedReader.readLine()) != null) {
//                set.add(txt);
//            }
//            strMap = set.stream().collect(Collectors.toMap(String::new, String::new));
//        } catch (Exception e) {
//            throw e;
//        }
//        return !ObjectUtils.isEmpty(strMap.get(areaOrType));
//    }


}
